import { fileURLToPath, URL } from "node:url";

import { defineConfig, loadEnv } from "vite";
import vue from "@vitejs/plugin-vue";
import AutoImport from "unplugin-auto-import/vite";
import Components from "unplugin-vue-components/vite";
import { ElementPlusResolver } from "unplugin-vue-components/resolvers";

export default defineConfig(({ mode, command }) => {
  // 获取 env 配置文件内容
  const env = loadEnv(mode, process.cwd());

  return {
    plugins: [
      vue(),
      AutoImport({
        imports: ["vue", "vue-router"],
        resolvers: [ElementPlusResolver()],
      }),
      Components({
        dts: true,
        resolvers: [
          (name) => {
            if (name.startsWith("OneSeve")) {
              return { name: name.toLowerCase(), from: `@/components/${name.toLowerCase()}` };
            }
          },
          ElementPlusResolver(),
        ],
      }),
    ],
    resolve: {
      alias: {
        "@": fileURLToPath(new URL("./src", import.meta.url)),
      },
    },
    server: {
      // 指定服务器监听的 IP 地址。默认值是 localhost，你也可以设置为 '0.0.0.0' 或 true 来监听所有地址
      host: "0.0.0.0",
      // 指定服务器监听的端口号。默认值是 5173
      port: Number(env.VITE_VUE_PORT),
      // 指定是否在启动服务器时自动打开浏览器。默认值是 false。
      open: true,
      // 启用或禁用跨源资源共享（CORS）。默认值是 true，允许任何源访问。你也可以传递一个选项对象来调整 CORS 行为
      cors: true,
      // 代理配置，允许你将 API 请求代理到另一个服务器。这对于解决开发过程中的跨域问题非常有用
      proxy: {
        [env.VITE_VUE_API_BASEURL]: {
          // 目标服务器地址（协议+域名+端口）
          target: "http://localhost:8080",
          // 修改请求头中的 Origin 为目标地址
          changeOrigin: true,
          // 是否代理 WebSocket 连接
          ws: true,
          // 路径重写
          rewrite: (path) => path.replace(new RegExp("^" + env.VITE_VUE_API_BASEURL), ""),
        },
      },
    },
  };
});
